/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Planificacion.Algoritmo;

import java.util.ArrayList;

/**
 *
 * @author Tatooine
 */
public class Turno implements Comparable<Object>{
    private int NumTurno;//Número de turno, de 0 a NumProductos-1
    private ArrayList<Coordenada> Destinos;//Destinos por turno
    private ArrayList<Producto> Productos;//Productos que llevara en cada turno
    private double TiempoAcumulado;//Tiempo acumulado del turno anterior
    private double FO;

    public Turno(int NumTurno,Coordenada Origen) {
        this.NumTurno=NumTurno;
        this.Destinos=new ArrayList();
        this.Destinos.add(Origen);//le agrego el origen.Siempre parte de la base
        this.Productos=new ArrayList();
        this.TiempoAcumulado=0.0;//será 0 en un inicio. Tiempo Acumulado de turno anterior
        this.FO=0.0;
    }
    
    public Turno(Turno turno){
        this.NumTurno=turno.getNumTurno();
        this.Destinos=new ArrayList();
        for (Coordenada coordenada : turno.getDestinos()) {
            this.Destinos.add(coordenada);
        }
        this.Productos=new ArrayList();
        for (Producto producto : turno.getProductos()) {
            this.Productos.add(producto);
        }
        this.TiempoAcumulado=turno.getTiempoAcumulado();
        this.FO=turno.getFO();
    }
    
    public int getNumTurno() {
        return NumTurno;
    }

    public void setNumTurno(int NumTurno) {
        this.NumTurno = NumTurno;
    }

    public double getTiempoAcumulado() {
        return TiempoAcumulado;
    }

    public void setTiempoAcumulado(double Tiempo) {
        this.TiempoAcumulado = Tiempo;
    }

    public ArrayList<Coordenada> getDestinos() {
        ArrayList<Coordenada>aux=new ArrayList();
        aux.addAll(this.Destinos);
        return aux;
    }

    public void setDestinos(Coordenada Destino) {
        Destinos.add(Destino);
    }

    /**
     * @return the FO
     */
    public double getFO() {
        return FO;
    }

    /**
     * @param FO the FO to set
     */
    public void setFO(double FO) {
        this.FO = FO;
    }
    
    @Override
    public int compareTo(Object o) {
        double num1=((Turno)o).getFO();
        double num2=this.getFO();
        if(num1>num2) return -1;
        else if(num1==num2) return 0;
        else return 1;
        
    }

    /**
     * @return the Productos
     */
    public ArrayList<Producto> getProductos() {
        ArrayList<Producto>aux=new ArrayList();
        aux.addAll(this.Productos);
        return aux;
    }

    /**
     * @param Productos the Productos to set
     */
    public void setProductos(Producto producto) {
        this.Productos.add(producto);
    }
    
}
